package org.springframework.beans.factory;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;

/**
 * @Name ConfigurableListableBeanFactory
 * @Description: 基于（Xml）配置的 Bean 容器
 * 描述信息：继承自 ConfigurableBeanFactory、ListableBeanFactory 和 AutowireCapableBeanFactory 接口，具备三者的能力。
 * - ConfigurableBeanFactory：基于配置（Xml）的 Bean 容器接口。
 * - ListableBeanFactory：支持集合操作的 Bean 容器接口。
 * - AutowireCapableBeanFactory：支持注入能力的 Bean 容器接口。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-15 16:49:46
 **/
public interface ConfigurableListableBeanFactory extends ConfigurableBeanFactory, ListableBeanFactory, AutowireCapableBeanFactory {

    /**
     * 获取 Bean 定义
     *
     * @param beanName Bean 实例名称
     * @return org.springframework.beas.factory.config.BeanDefinition Bean 定义
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-14 14:53:31
     */
    BeanDefinition getBeanDefinition(String beanName) throws BeansException;

    /**
     * 提前实例化所有单例 Bean
     *
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-19 19:32:20
     */
    void preInstantiateSingletons() throws BeansException;

}

